#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdlib.h>

int main()
{
  pid_t id = fork();//创建子进程

  if (id == 0)//子进程
  {
    int cnt = 5;
    while (cnt)
    {
        printf("I am child,pid = %d, cnt = %d\n", getpid(), cnt);
        sleep(1);
        cnt--;
    }
   exit(0);//正常退出
  }
  else if(id > 0)//父进程
  {
    

     printf("I am father, pid = %d\n", getpid());
    // sleep(7);

     int status = 0;
     pid_t ret = waitpid(id, &status, 0);//阻塞等待，也就是父进程在子进程的等待队列里，等待子进程完成
    
    // pid_t ret = wait(NULL);//阻塞等待，也就是父进程在子进程的等待队列里，等待子进程完成

     if (ret > 0)
     {
        printf("等待子进程成功，ret = %d，子进程的退出信号：%d，子进程的退出代码：%d\n", ret, (status & 0x7f), (status >> 8) & 0xff);
     }


   // int cnt = 5;
  //while (1)
  //  {
   //   printf("I am father, pid = %d\n", getpid());
   //   sleep(1);
   //   cnt--;
   // }

  }
  else//创建失败
  {
    perror("fork");//头文件：<stdio.h>
    exit(1);//0:正常结束   非0：异常结束  头文件：<stdlib.h>
  }


  return 0;
}

